package com.ruoyi.order.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.game.domain.GameRole;
import com.ruoyi.order.domain.OrderInfo;
import com.ruoyi.order.domain.dto.OrderInfoAppPageDTO;
import com.ruoyi.order.domain.dto.OrderInfoPageDTO;
import com.ruoyi.server.domain.vo.ServerTaskPeopleCountVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * 订单Mapper接口
 *
 * @author ghostmen
 * @date 2024-11-03
 */
public interface OrderInfoMapper extends BaseMapper<OrderInfo> {

    /**
     * 查询订单
     *
     * @param orderId 订单主键
     * @return 订单
     */
    public OrderInfo selectOrderInfoByOrderId(Long orderId);

    /**
     * 查询订单
     *
     * @param orderIds 订单主键
     * @return 订单
     */
    public List<OrderInfo> selectOrderInfoByOrderIds(@Param("orderIds") Long[] orderIds);

    /**
     * 查询订单列表
     *
     * @param orderInfo 订单
     * @return 订单集合
     */
    public List<OrderInfo> selectOrderInfoList(OrderInfoPageDTO orderInfo);

    /**
     * 查询订单列表
     *
     * @param pageDTO 订单
     * @return 订单集合
     */
    public List<OrderInfo> getOrderList(OrderInfoAppPageDTO pageDTO);

    /**
     * 新增订单
     *
     * @param orderInfo 订单
     * @return 结果
     */
    public int insertOrderInfo(OrderInfo orderInfo);

    /**
     * 修改订单
     *
     * @param orderInfo 订单
     * @return 结果
     */
    public int updateOrderInfo(OrderInfo orderInfo);

    /**
     * 删除订单
     *
     * @param orderId 订单主键
     * @return 结果
     */
    public int deleteOrderInfoByOrderId(Long orderId);

    /**
     * 批量删除订单
     *
     * @param orderIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteOrderInfoByOrderIds(Long[] orderIds);

    /**
     * 用户删除订单
     *
     * @param orderIds 需要删除的数据主键集合
     * @return 结果
     */
    public int userRemoveByIds(@Param("orderIds") Long[] orderIds);

    /**
     * 获取对应区服任务报名人数
     *
     * @param taskIds 区服任务id
     * @return 结果
     */
    public List<ServerTaskPeopleCountVO> getApplyPeopleCountByTaskIds(@Param("taskIds") List<Long> taskIds);

    /**
     * 获取对应区服任务报名人数
     *
     * @param taskId 区服任务id
     * @return 结果
     */
    public ServerTaskPeopleCountVO getApplyPeopleCountByTaskId(@Param("taskId") Long taskId);

    /**
     * 查询所有未付款的并超时的订单
     */
    List<OrderInfo> getUnpaidAndTimeoutOrders();

    /**
     * 根据订单号查询订单
     *
     * @param orderNum
     * @return
     */
    OrderInfo getOrderInfoByOrderNum(@Param("orderNum") String orderNum);

    /**
     * @throws
     * @MethodName getOrderInfoListByTaskIdsAndUserId
     * @author zhouzihao
     * @param: taskIds
     * @param: userId
     * @DateTime 2024年11月7日, 0007 上午 10:11
     * @return: java.util.List<com.ruoyi.order.domain.OrderInfo>
     * @description:获取当前用户订单信息
     */
    List<OrderInfo> getOrderInfoListByTaskIdsAndUserId(@Param("taskIds") List<Long> taskIds, @Param("userId") Long userId);

    /**
     * 根据区服任务查询订单
     *
     * @param taskId
     * @return
     */
    List<OrderInfo> selectOrderInfoListByTaskId(@Param("taskId") Long taskId);
}
